import java.io.FileNotFoundException;
import java.io.IOException;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Jose Luis Orta
 */
public class ControladorConjPares {
    private ConjPares cp;
    private GestorConjPares gcp;
    /**
     * Constructora por defecto
     */
    public ControladorConjPares(){
        cp = new ConjPares();
        gcp = new GestorConjPares();
    }
    
    public ConjPares getConjPares() {
        return cp;
    }
    /**
     * AÃ±ade un par al conjunto
     * @param s1 Primera cadena del par
     * @param s2 Segunda cadena del par
     * @param peso Repeticiones del par
     */
    public void anadirPar(String s1, String s2, int peso){
        cp.anadirPar(s1, s2,peso);
    }
    /**
     * AÃ±ade un par al conjunto
     * @param s1 Primera cadena del par
     * @param s2 Segunda cadena del par
     */
    public void anadirPar(String s1, String s2){
        cp.anadirPar(s1, s2);
    }
    /**
     * Busca un par en el conjunto
     * @param s1
     * @param s2
     * @return Devuelve un vector de String con 3 columnas, [0] contiene s1, [1] contiene s2, [2] contiene las repeticiones
     */
    public String[] buscarPar(String s1,String s2){
        String[] result = new String[3];
        int i=cp.buscarPar(s1, s2);
        if (i>-1){
            Par p=cp.getPar(i);
            result[0]=p.getc1();
            result[1]=p.getc2();
            result[2]=String.valueOf(p.getcontador());
            return result;
        }
        return null;
    }

    public int buscarParIndice (String s1, String s2) {
        return cp.buscarPar(s1, s2);
    }
    /**
     * El conjunto de pares se guarda al medio persistente.
     * @param pares Es una matriz con N filas y 3 columnas, [0] contiene s1, [1] contiene s2, [2] contiene las repeticiones
     * @param ruta La ruta donde se guardara
     * @throws FileNotFoundException
     * @throws IOException
     */
    public void salvarConjPares(String ruta) throws FileNotFoundException, IOException{
        String [][] pares = new String [longitudPares()][3];
        for (int i = 0; i < longitudPares(); ++i) {
            pares[i] = cp.getParS(i);
        }
        gcp.salvarConjPares(pares, ruta);
    }
    /**
     * El conjunto de pares se carga del medio persistente.
     * @param ruta La ruta donde se carga
     * @return Devuelve una matriz de N filas y 3 columnas, [0] contiene s1, [1] contiene s2, [2] contiene las repeticiones
     * @throws FileNotFoundException
     * @throws IOException
     */
    public String[][] cargarConjPares(String ruta,Progreso p) throws FileNotFoundException, IOException, FormatoConjParesNoValido{
        String[][] result=gcp.cargarConjPares(ruta);
        p.setN(result.length);
        for (int i = 0; i < result.length; ++i) {
            //cp.anadirParDef(result[i][1], result[i][0], Integer.valueOf(result[i][2]));
            int ex = cp.buscarParYAnadir(result[i][1], result[i][0], Integer.valueOf(result[i][2]));
            p.setX((double)i);
        }
        p.setFin(true);
        String[][] resfinal = cpAVector();
        return resfinal;
    }

    public void eliminarConjPares () {
        cp = new ConjPares();
    }

    public void borrarPar (String s1, String s2){
        int i = cp.buscarPar(s1, s2);
        cp.quitarPar(i);
    }
    public void modificarPar (String s1, String s2, String s1Nuevo, String s2Nuevo) {
        int i = cp.buscarPar(s1, s2);
        cp.modificarPar(i, s1Nuevo, s2Nuevo);
    }
    public void decrementarPar (String s1, String s2){
        int i = cp.buscarPar(s1, s2);
        if (i != -1)cp.decrementarPar(i);
    }
    public int longitudPares (){
        return cp.longitud();
    }
    public String[][] getPares(int i, int k){
        return cp.getPares(i, k);
    }
    private String[][] cpAVector () {
        String [][] res = new String [cp.longitud()][3];
        for (int i = 0; i < cp.longitud(); ++i) {
            Par aux = cp.getPar(i);
            res[i][1] = aux.getc1();
            res[i][0] = aux.getc2();
            res[i][2] = String.valueOf(aux.getcontador());
        }
        return res;
    }
    
}